GSP-023 Deploying a Python Flask Web Application to
App Engine Flexible
2017년 10월 29일 일요일
오전 5:29
링크: https://google.qwiklabs.com/focuses/6029
Python Flask web application을
App Engine Flexible environment 에 deploy 해보자
사진을 업로드하고, 사진속 인물이 행복한지 분석하는 앱이다
Google Cloud API를
사용한다
- Vision, Storage, Datastore
create, manage, scale 이 쉽다
관리할 서버가
없다 = Serverless
할 수 있는
일 - 이 모든 걸 customizing 가능하다
1) Auto scaling 들어오는
트래픽에 따라
2) Load balancing
3) Microservices
4) SQL, NoSQL database
5) Traffic splitting
6) Logging
7) Searching
8) Versioning
9) Roll out / Roll back
10) security scanning
App Engine Environment
1) Flexible Environment: 다양하게 만질 수 있다
2) Standard Environment: 표준 환경들을 제공한다
1) App Engine Flexible Environment 에 씸플한 Web App을
deploy 해보자
2) Google Cloud client libraries 에 접근하는 법 - Vision, Storage, Datastore
3) Cloud Shell 사용법
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git |
cd
python-docs-samples/codelabs/flex_and_vision |
- Datastore API, Storage API는 자동으로 enable 되어 있음
gcloud service-management list
>> service.txt // 기존에 제공되던 API 확인 gcloud service-management enable
vision.googleapis.com // Vision API를 enable gcloud service-management list
>> service2.txt // 이후 추가된 API 확인 * 이런 명령들은 현재 set 되어있는 project 에 대한 값을 보여준다. - gcloud config list project 에 나오는 그 project |
|
|
- 많이 쓰이는 값들을
환경변수로 설정해주자
export
PROJECT_ID=[YOUR_PROJECT_ID] // 현재 내 project id |
export
GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json" // echo
$USER 해보면 넣을 값을 알 수
있겠지? |
|
codelab 이라는 account 를
만든다 |
|
codelab 계정을 - 내 프로젝트에 바인딩하고 - serviceAccount 멤버로 지정하고 - 마지막으로 role을 owner로 지정해준다 |
key.json은 대충 이렇게 생겨먹음
|
그리고 key를 생성해준다 |
내 컴퓨터가
지저분해지지 않게 가상환경에서 처리해보자
|
|
|
가상환경 나오려면 deactivate 치면 됨 |
|
|
|
|
참고. 가상환경을 activate 하건 안하건 파일들을 접근하고 만질수는
있다. 하지만 requrements.txt 설치한건 안먹힌다
Storage Bucket을
만들어보자
|
스토리지 이름은 권장사항임 |
|
|
|
|
|
|
샘플 프로젝트
구조는 이렇다
Flask web application 이다
- 사용자가 사진을 등록하면Cloud Storage에 저장하고
- Cloud Vision API로 얼굴인식후 분석한다음
- Key information은 Datastore (= GCP의 NoSQL 데이터베이스)에 저장된다
- 사용자는 Datastore에 매번 접근한다
구글 클라우드 API 가져오기
홈페이지 방문하면
실행되는 것
- datasore_client를 생성하고
- kind='Faces' 로
쿼리를 설정한다음
- query.fetch()로
가져온 진짜 값을 list로 저장함 to image_entities
- render_template를 통해 homepage.html 에 있는
image_entities에 값을 전송해준다.
이제 entities가 Datastore에 저장되는 부분을 보자
- Datastore는 entities 라 부르는 object를 저장한다
homepage.html
- Flash web framework는 Jinja2 라는 템플릿 엔진을 사용한다
- main.py 의 변수와
표현을 homepage.html로 전달해주는 역할을 한다.
- 전달된 내용은 페이지가
랜더링되면서 반영된다.
app.yaml을 만지면
된다
아까 만들땐 gcloud app create 였고 이번엔
이제 들어가보자
Microsoft OneNote 2016에서 작성